package com.ys.nms.module.business.controller.admin.sensors.vo;

import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.util.*;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime;
import cn.idev.excel.annotation.*;

@Schema(description = "管理后台 - 传感器 Response VO")
@Data
@ExcelIgnoreUnannotated
public class SensorsRespVO {

    @Schema(description = "ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "7969")
    @ExcelProperty("ID")
    private Integer sensorId;

    @Schema(description = "0未删除1删除", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("0未删除1删除")
    private Integer sensorDeleted;

    @Schema(description = "传感器的类别，如 temperature	（温度）、voltage	（电压）、fanspeed	（风扇转速）、current	（电流）等", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("传感器的类别，如 temperature	（温度）、voltage	（电压）、fanspeed	（风扇转速）、current	（电流）等")
    private String sensorClass;

    @Schema(description = "设备ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "5476")
    @ExcelProperty("设备ID")
    private Integer deviceId;

    @Schema(description = "数据采集方式，通常为 'snmp'	，也可能支持 'agent'	 或 'ipmi'	 等，表示使用何种协议或代理获取数据。", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
    @ExcelProperty("数据采集方式，通常为 'snmp'	，也可能支持 'agent'	 或 'ipmi'	 等，表示使用何种协议或代理获取数据。")
    private String pollerType;

    @Schema(description = "SNMP OID 字符串，用于 SNMP 查询获取该传感器的原始值。", requiredMode = Schema.RequiredMode.REQUIRED, example = "19404")
    @ExcelProperty("SNMP OID 字符串，用于 SNMP 查询获取该传感器的原始值。")
    private String sensorOid;

    @Schema(description = "SNMP 表中的索引值，用于区分同一类型多个传感器（如多个风扇或温度探头）")
    @ExcelProperty("SNMP 表中的索引值，用于区分同一类型多个传感器（如多个风扇或温度探头）")
    private String sensorIndex;

    @Schema(description = "传感器的具体型号或类型标识，如 apc-temperature	、cisco-envmon	，用于识别传感器来源或硬件类型。", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
    @ExcelProperty("传感器的具体型号或类型标识，如 apc-temperature	、cisco-envmon	，用于识别传感器来源或硬件类型。")
    private String sensorType;

    @Schema(description = "传感器的描述信息，通常为用户可读的名称，如 CPU Temperature 或 Fan 1 Speed")
    @ExcelProperty("传感器的描述信息")
    private String sensorDescr;

    @Schema(description = "传感器分组名称，可用于前端界面按组展示（如“电源”、“环境”等）。")
    @ExcelProperty("传感器分组名称，可用于前端界面按组展示（如“电源”、“环境”等）。")
    private String group;

    @Schema(description = "除数，用于将原始采集值转换为实际物理值（实际值 = 原始值 × multiplier / divisor	）。常用于单位换算（如 mV 转 V）。", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("除数，用于将原始采集值转换为实际物理值（实际值 = 原始值 × multiplier / divisor	）。常用于单位换算（如 mV 转 V）。")
    private Long sensorDivisor;

    @Schema(description = "乘数，用于将原始采集值转换为实际物理值（实际值 = 原始值 × multiplier / divisor	）。", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("乘数，用于将原始采集值转换为实际物理值（实际值 = 原始值 × multiplier / divisor	）。")
    private Integer sensorMultiplier;

    @Schema(description = "当前采集到的传感器数值（已换算），由轮询器更新。")
    @ExcelProperty("当前采集到的传感器数值（已换算），由轮询器更新。")
    private Double sensorCurrent;

    @Schema(description = "传感器的上限阈值")
    @ExcelProperty("传感器的上限阈值")
    private Double sensorLimit;

    @Schema(description = "传感器的上限警告阈值，超过此值触发警告告警。")
    @ExcelProperty("传感器的上限警告阈值，超过此值触发警告告警。")
    private Double sensorLimitWarn;

    @Schema(description = "传感器的下限阈值")
    @ExcelProperty("传感器的下限阈值")
    private Double sensorLimitLow;

    @Schema(description = "传感器的下限告警阈值，低于此值触发严重告警。")
    @ExcelProperty("传感器的下限告警阈值，低于此值触发严重告警。")
    private Double sensorLimitLowWarn;

    @Schema(description = "是否启用告警：1	 启用，0	 禁用。", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("是否启用告警：1	 启用，0	 禁用。")
    private Integer sensorAlert;

    @Schema(description = "是否为用户自定义传感器：Yes	 表示由用户手动添加，No	 表示由系统自动发现。", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("是否为用户自定义传感器：Yes	 表示由用户手动添加，No	 表示由系统自动发现。")
    private String sensorCustom;

    @Schema(description = "对应于 SNMP 的 ENTITY-MIB	 中的 entPhysicalIndex	，用于定位硬件实体")
    @ExcelProperty("对应于 SNMP 的 ENTITY-MIB	 中的 entPhysicalIndex	，用于定位硬件实体")
    private String entPhysicalIndex;

    @Schema(description = "指明该传感器测量的是哪个硬件实体（如 temperature	, power	 等），用于关联物理组件。")
    @ExcelProperty("指明该传感器测量的是哪个硬件实体（如 temperature	, power	 等），用于关联物理组件。")
    private String entphysicalindexMeasured;

    @Schema(description = "最后一次更新时间，每次数据更新时自动刷新为当前时间戳。", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("最后一次更新时间，每次数据更新时自动刷新为当前时间戳。")
    private LocalDateTime lastupdate;

    @Schema(description = "上一次采集的传感器值，用于计算变化率或检测突变")
    @ExcelProperty("上一次采集的传感器值，用于计算变化率或检测突变")
    private Double sensorPrev;

    @Schema(description = "用户自定义处理函数名称（PHP 函数），用于对原始值进行特殊处理。")
    @ExcelProperty("用户自定义处理函数名称（PHP 函数），用于对原始值进行特殊处理。")
    private String userFunc;

    @Schema(description = "rrd_type", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
    @ExcelProperty("rrd_type")
    private String rrdType;

}
